<?php

try {
	$perPage3 = 3;
	$perPage10 = 10;
	$perPage20 = 20;
	$perPage50 = 50;
	$perPage100 = 100;
	
	//Identifiant de l'onglet
	$idOnglet = tabGetIdByCode('TAB_LISTE_INVITES');
	
	//Identifiant de l'onglet de modification des invités
	$idOngletModif = tabGetIdByCode('TAB_UPDATE_INVITES');
	
	//Identifiant de l'onglet d'envoi de mails aux invités
	$idOngletEnvoiMail = tabGetIdByCode('TAB_ENVOI_MAIL_INVITES');
	
	//On récupère les informations du cookie
	$idMariage = getIdMariage();
	$infosMariage = getInfosMariage($idMariage);
	
	//Tableau de parité des couleurs d'arrière-plan par nom de classe
	$aryBckGdColorClass = array
						(0 => 'bgLightGrey'
						,1 => 'bgLightBlue'
						);
						
	//Classe CSS de la couleur d'annulation d'un invité
	$classInviteSuppr = 'bgLightRed';
	
	if (isset($_REQUEST['perPage'])) {
		//POST ou GET. Affichage différent demandé. Il y avait donc forcément des invités, pas besoin de contrôler
		$perPage = intval($_REQUEST['perPage']);
	} else {
		//Valeur à afficher par défaut DEFAUT_MAX_INVITE_PAR_PAGE
		$perPage = $perPage10;
	}
	
	//Compteur de lignes des invités, modulo 2
	$cptModuloInvite = 0;
	
	//Utilitaires de gestion des invités d'invités à afficher
	$idxInviteDebut = 0;
	$maxInviteParPage = $perPage;
	
	//Compteur d'itérations
	$cptIter = 0;
	
	//Page courante
	$pageCourante = 1;
	
	//Initialisation des variables de sélection de combos box
	$selPerPage10 = '';
	$selPerPage3 = '';
	$selPerPage20 = '';
	$selPerPage50 = '';
	$selPerPage100 = '';
	
	
	if ($perPage == '10') {
		$selPerPage10 = ' selected="selected"';
	} elseif ($perPage == '3') {
		$selPerPage3 = ' selected="selected"';
	} elseif ($perPage == '20') {
		$selPerPage20 = ' selected="selected"';
	} elseif ($perPage == '50') {
		$selPerPage50 = ' selected="selected"';
	} elseif ($perPage == '100') {
		$selPerPage100 = ' selected="selected"';
	}
	
	// On récupère la liste des invités
	$tousInvites = getListeInvitesByMariage($infosMariage[KEY_ID_MARIAGE]);
	$nbTotalInvites = count($tousInvites);
	
	// Initialisation du tableau des invités cochés ou non pour envoi de mail
	foreach ($tousInvites as $i => $invite) {
		//Par défaut, tous les invités sont initialisés à non cochés
		$inviteCoche[$i] = '0';
	}
			
	if ($_SERVER['REQUEST_METHOD'] === 'GET') {
		//Appel de la page ou pagination
		if (isset($_GET['page'])) {
			$pageCourante = intval($_GET['page']);
		}
		
		if (isset($_GET['sort'])) {
			$tousInvites = getListeInvitesTriesParNom($infosMariage[KEY_ID_MARIAGE], $_GET['sort']);
			$nbTotalInvites = count($tousInvites);
		}
	}
	
	//On calcule l'index de l'invité à afficher
	$idxInviteDebut = ($pageCourante - 1) * $maxInviteParPage;
	
	//Informations sur le statut annulé
	$statutAnnule = getStatutByCode(STATUT_ANNULE);
?>

<!-- Code javascript à exécuter en cas de check ou uncheck des checkBoxes -->
<script type="text/javascript">

	/**
	 * Fonction retournant true s'il existe une checkbox d'envoi de mail coché et false sinon
	 */
	function existCheckedBox(idxDebut, maxInvite, nbTotalInvites) {
		var cptIter = 0;
		var i = 0;
		var checked = false;
		for (i=idxDebut; i<nbTotalInvites && cptIter<maxInvite; i++) {
			//Si un élément est coché, on sort de la boucle
			if (document.getElementById("mail_"+i) && document.getElementById("mail_"+i).checked) {
				checked = true;
				break;
			}
			cptIter++;
		}
		return checked;
	}

	/**
	 * Fonction retournant true si toutes les checkboxs d'envoi de mail sont cochées et false sinon
	 */
	function allCheckedBox(idxDebut, maxInvite, nbTotalInvites) {
		var cptIter = 0;
		var i = 0;
		var checked = true;
		for (i=idxDebut; i<nbTotalInvites && cptIter<maxInvite; i++) {
			//Si un élément est coché, on sort de la boucle
			if (document.getElementById("mail_"+i) && !(document.getElementById("mail_"+i).checked)) {
				checked = false;
				break;
			}
			cptIter++;
		}
		return checked;
	}

	/**
	* Fonction permettant d'afficher ou non le bouton d'envoi de mail selon qu'au moins une
	 * checkbox est cochée ou non.
	 */
	function checkDisplayBouton(idxDebut, maxInvite, nbTotalInvites) {
		var checked = existCheckedBox(idxDebut, maxInvite, nbTotalInvites);

		if (checked) {
			document.getElementById("displayTr").style.display="block";
			document.getElementById("displayTd").style.width="150em";
		} else {
			document.getElementById("displayTr").style.display="none";
		}
	}

	/**
	 * Action effectuée lors d'un clic sur l'envoi en masse consistant à cocher/décocher
	 * les checkboxes
	 */
	function actionCheckUncheckAll(isCheck, idxDebut, maxInvite, nbTotalInvites) {
		var tousChecked = allCheckedBox(idxDebut, maxInvite, nbTotalInvites);
		var cptIter = 0;
		var i = 0;

		if (tousChecked) {
			//Toutes les checkboxes de la page sont cochées, on les décoches toutes
			for (i=idxDebut; i<nbTotalInvites && cptIter<maxInvite; i++) {
				//Si un élément est coché, on sort de la boucle
				if (document.getElementById("mail_"+i)) {
					document.getElementById("mail_"+i).checked = false;
				}
				cptIter++;
			}
		} else {
			//Il existe des checkboxes non cochées, on les coche toutes
			for (i=idxDebut; i<nbTotalInvites && cptIter<maxInvite; i++) {
				//Si un élément est coché, on sort de la boucle
				if (document.getElementById("mail_"+i)) {
					document.getElementById("mail_"+i).checked = true;
				}
				cptIter++;
			}
		}
	}

	/**
	 * Fonction qui check toutes les checkboxes affichées et permet l'envoi de m'ail à tous les invités
	 */
	function checkAllButton(idxDebut, maxInvite, nbTotalInvites) {
		//Tout est coché, il faut donc tout décocher
		actionCheckUncheckAll(false, idxDebut, maxInvite, nbTotalInvites);
		checkDisplayBouton(idxDebut, maxInvite, nbTotalInvites);
	}
</script>

<?php if ($nbTotalInvites > 0) { ?>
<div>
	<form action="index.php?onglet=<?php echo $idOnglet; ?>" method="post">
		Afficher
		<select name="perPage" onchange="this.form.submit();">
			<option value="10"<?php echo $selPerPage10?>>10</option>
			<option value="3"<?php echo $selPerPage3?>>3</option>
			<option value="20"<?php echo $selPerPage20?>>20</option>
			<option value="50"<?php echo $selPerPage50?>>50</option>
			<option value="100"<?php echo $selPerPage100?>>100</option>
		</select>
		par page
	</form>
</div><br />
<div class="note">
	<a href="index.php?onglet=<?php echo $idOnglet; ?>&sort=TOUS">TOUS</a>
	<?php
		$alphabet = getAlphabet();
		foreach ($alphabet as $letter) {
			echo '&nbsp;&nbsp;<a href="index.php?onglet='.$idOnglet.'&sort='.$letter.'"> '.strtoupper($letter).'</a>';
		}
	?>
</div>
<form action="index.php?onglet=<?php echo $idOngletEnvoiMail; ?>" method="post">
	<table class="listInviteBorder">
	<thead class="bold">
		<tr>
			<td class="civilite listInviteBorder paddingLeftRight02">Civilité</td>
			<td class="nom listInviteBorder paddingLeftRight02">Nom</td>
			<td class="prenom listInviteBorder paddingLeftRight02">Prénom</td>
			<td class="email listInviteBorder paddingLeftRight02">Email</td>
			<td class="telephone listInviteBorder paddingLeftRight02">Téléphone</td>
			<td class="confirme listInviteBorder paddingLeftRight02">Confirmé</td>
			<td class="confirme listInviteBorder paddingLeftRight02">
				<!-- a href="index.php?onglet=<?php //echo $idOngletEnvoiMail; ?>&emailsInvites=TOUS"-->
				<a href="#" onclick="checkAllButton(<?php echo $idxInviteDebut?>, <?php echo $maxInviteParPage?>, <?php echo $nbTotalInvites?>)">
					Envoi Mail
				</a>
			</td>
		</tr>
	</thead>
	<tbody>
	<?php
		for ($i=$idxInviteDebut; $i<$nbTotalInvites && $cptIter<$maxInviteParPage; $i++) {
			$class = $aryBckGdColorClass[$cptModuloInvite];
			if (isset($tousInvites[$i]) && ($tousInvites[$i]['ID_STATUT'] == $statutAnnule['ID'])) {
				$class = $classInviteSuppr;
			}
	?>
		<tr class="<?php echo $class ?>">
			<td class="civilite listInviteBorder paddingLeftRight02"><?php echo printFieldArray('CIVILITE', $tousInvites[$i]); ?></td>
			<td class="nom listInviteBorder paddingLeftRight02">
				<a class="modifTab" href="index.php?onglet=<?php echo $idOngletModif; ?>&idInvite=<?php echo $tousInvites[$i]['ID']?>&parent=<?php echo $idOnglet; ?>">
				<?php echo strtoupper(accentCleaner(printFieldArray('NOM',$tousInvites[$i]))); ?>
				</a>
			</td>
			<td class="prenom listInviteBorder paddingLeftRight02"><?php echo printFieldArray('PRENOM', $tousInvites[$i]); ?></td>
			<td class="email listInviteBorder paddingLeftRight02"><?php $email = printFieldArray('EMAIL', $tousInvites[$i]); echo $email; ?></td>
			<td class="telephone listInviteBorder paddingLeftRight02"><?php echo printFieldArray('TELEPHONE_FR', $tousInvites[$i]); ?></td>
			<td class="confirme listInviteBorder paddingLeftRight02"><?php $conf = $tousInvites[$i]['PRESENCE_CONFIRMEE']; if ($conf == '1') {echo 'Oui';} else {echo 'Non';} ?></td>
			<td class="confirme listInviteBorder paddingLeftRight02">
				<?php
					//Affichage de la checkbox que si l'invité a un email valide et n'est pas supprimé
					if (isEmail($email) && ($class !== $classInviteSuppr)) {
				?>
					<?php $checkBox = 'mail_'.$i; ?>
					<input type="checkbox" id="<?php echo $checkBox; ?>" name="<?php echo $checkBox; ?>"
					onclick="checkDisplayBouton(<?php echo $idxInviteDebut?>, <?php echo $maxInviteParPage?>, <?php echo $nbTotalInvites?>);" />
				<?php } //Fin if (isEmail($email)) ?>
			</td>
		</tr>
	<?php
			//Incréments des compteurs d'affichage d'invités et d'alternance de classe css
			$cptIter++;
			$cptModuloInvite++;
			$cptModuloInvite = $cptModuloInvite % 2;
		}
		
	?>
	</tbody>
	</table>
	
	<?php
		//On gère la pagination à ce stade
		$pagination = '';
		if ($maxInviteParPage < $nbTotalInvites) {
			//Le nombre total d'invités est strictement plus grand que le max à afficher. Une pagination est nécessaire
			$pagePrec = ($pageCourante <= 1) ? 1 : ($pageCourante - 1);
			$lastPage = ceil($nbTotalInvites/$maxInviteParPage);
			//Pour la page suivante, le compteur est forcément au moins égal au max par page.
			$pageSuiv = ($pageCourante >= $lastPage) ? $lastPage : ($pageCourante + 1);
			
			$pagination = paginationManageLink($idOnglet, $pageCourante, 1, ' << ', $perPage);
			$pagination .= paginationManageLink($idOnglet, $pageCourante, $pagePrec, '< ', $perPage);
			$pagination .= paginationManageLink($idOnglet, $pageCourante, $pageSuiv, '> ', $perPage);
			$pagination .= paginationManageLink($idOnglet, $pageCourante, $lastPage, ' >> ', $perPage);
		}
		echo "<div class=\"pagination\">$pagination</div>";
?>
		<!-- Affichage des boutons que s'il y a des invités affichés -->
		<p><br /></p>
		<table>
			<tr>
				<td width="550em">
					<span>Envoyer un email à tous les invités en cliquant sur le bouton </span>
				</td>
				<td>
					<input type="submit" value="Envoyer à tous" onclick="document.getElementById('sendAllInvitees').value='1';return true;" />
				</td>
			</tr>
			<tr id="displayTr" style="display: none">
				<td id="displayTd">
					<span>Envoyer un email aux invités sélectionnés en cliquant sur le bouton </span>
				</td>
				<td>
					<input type="submit" value="Envoyer" />
				</td>
			</tr>
		</table>
<?php
	} //Fin if ($nbTotalInvites > 0)
	else {
		if (!isset($_GET['sort']) || strtoupper(trim($_GET['sort'])) === 'TOUS') {
			echo '<div>Aucun invité n\'a été trouvé pour ce mariage</div>';
		} else {
			$toPrint = '<a class="note" href="index.php?onglet='.$idOnglet.'"> &lt;&lt; Retour à la liste des invités</a><p><br /></p>';
			$toPrint .= '<div>Aucun invité ne commençant par la lettre "'.$_GET['sort'].'" n\'a été trouvé pour ce mariage</div>';
			echo $toPrint;
		}
	} //Fin else de if ($nbTotalInvites > 0)
	?>
		
	<input type="hidden" id="sendAllInvitees" name="sendAllInvitees" value="0" />
	<input type="hidden" name="idxStart" value="<?php echo $idxInviteDebut; ?>" />
</form>

<?php } // try {
	catch (Exception $e) {
		redirectErrorPage($e, 'TAB_LISTE_INVITES', URI_ERROR_PAGE);
	}
?>